package com.aaa.service.fpa.impl;

import cn.hutool.core.util.ObjectUtil;
import com.aaa.aspect.InsertAnn;
import com.aaa.aspect.UpdateAnn;
import com.aaa.dao.fpa.TestPlanFpaDao;
import com.aaa.entity.fpa.TestPlanFpa;
import com.aaa.entity.PageSortEntity;
import com.aaa.service.fpa.TestPlanFpaService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import lombok.extern.java.Log;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 测试计划fpa(TestPlanFpa)表服务实现类
 *
 * @author
 * @since 2022-08-31 11:41:18
 */
@Service("testPlanFpaService")
@Log
public class TestPlanFpaServiceImpl implements TestPlanFpaService {
    @Resource
    private TestPlanFpaDao testPlanFpaDao;

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public TestPlanFpa queryById(Integer id) {
        return this.testPlanFpaDao.queryById(id);
    }

    /**
     * 分页查询
     *
     * @param testPlanFpa 筛选条件
     * @param testPlanFpa 分页对象
     * @return 查询结果
     */
    @Override
    public Page queryAll(PageSortEntity pageSortEntity, TestPlanFpa testPlanFpa) {
        PageHelper.startPage(pageSortEntity.getPage(), pageSortEntity.getLimit(), pageSortEntity.getOrderString());
        List<TestPlanFpa> testPlanFpas = testPlanFpaDao.queryAllByLimit(testPlanFpa);
        Page page = (Page) testPlanFpas;
        return page;
    }


    /**
     * 新增数据
     *
     * @param testPlanFpa 实例对象
     * @return 实例对象
     */
    @InsertAnn
    @Override
    public TestPlanFpa insert(TestPlanFpa testPlanFpa) {
        while (true) {
            // 用math.random()实现，比较麻烦的一种方式，思路是：math.random()生成的是[0.0, 1.0)的伪随机数，
            // 如果 当前值是0.9...，则直接*1000000返回，其他情况可能生成0.8...，0.03...，0.0003...，这些情况都*1000000，
            // 但是结果可能是6位，5位，4位都有可能，那么再加上100000，肯定就保证是6位了。
            int intFlag = (int) (Math.random() * 1000000);
            String flag = String.valueOf(intFlag);
            if (flag.length() == 6 && flag.substring(0, 1).equals("9")) {
                System.out.println(intFlag);
            } else {
                intFlag = intFlag + 100000;
                // System.out.println(intFlag);
            }

            TestPlanFpa testPlanFpaNew = new TestPlanFpa();
            testPlanFpaNew.setTestCode(intFlag);
            List<TestPlanFpa> testPlanFpaList = testPlanFpaDao.queryByAllView(testPlanFpaNew);
            log.info("生成的随机数，跟数据库是否一致校验" + intFlag);
            if (ObjectUtil.isEmpty(testPlanFpaList)) {
                //退出循环之前，将合法的随机数保存到实体对象中testPlanFpa
                testPlanFpa.setTestCode(intFlag);
                break;
            }
        }

        this.testPlanFpaDao.insert(testPlanFpa);
        return testPlanFpa;
    }


    /**
     * 修改数据
     *
     * @param testPlanFpa 实例对象
     * @return 实例对象
     */


    @UpdateAnn
    @Override
    public boolean update(TestPlanFpa testPlanFpa) {
        return this.testPlanFpaDao.update(testPlanFpa);
    }

    /**
     * 通过主键删除数据
     *
     * @param list 主键
     * @return 是否成功
     */
    @Override
    public boolean delete(List list) {
        return this.testPlanFpaDao.delete(list);
    }

    /*
     * 查询是否重复
     *
     * */
    @Override
    public boolean repetitionName(TestPlanFpa testPlanFpa) {
        Integer integer = this.testPlanFpaDao.repetitionName(testPlanFpa);
        if (integer == 0) {
            return true;
        }
        return false;
    }


}
